
#使用Python进行邮件发送
###########################################################################################################################################################
#smtplib模块:主要进行发送邮件
# 导入Python内置的smtplib模块，用于发送电子邮件
import smtplib

# 使用smtplib.SMTP类创建一个SMTP对象，指定邮件服务器的主机名（host）和端口号（port）
#host:连接邮箱的服务器，可以指定服务器的域名（QQ邮箱服务器：smtp.qq.com;网易邮箱服务器：smtp.163.com等等）
#port:是端口，一般情况下smtp默认端口号为25。（QQ邮箱端口号：465或587，网易邮箱端口号：465或994）
smtp = smtplib.SMTP_SSL(host=host, port=port)

# 登录SMTP服务器，提供用户名（username）和密码（password）进行身份验证
# 进行登录，需要：发送方邮箱地址,邮箱地址的授权码
smtp.login(username=from_addr, password=password)

# 发件人电子邮件地址,收件人电子邮件地址（可以是单个地址字符串，也可以是包含多个地址的列表）,邮件消息体，通常由email库构造并转换为字符串形式
smtp.sendmail(from_addr=from_addr, to_addrs=to_addrs, msg=msg.as_string())
# 邮箱正⽂内容，第⼀个参数为内容，第⼆个参数为格式(plain 为纯⽂本)，第三个参数为编码
msg = MIMEText('使⽤python发送邮件测试', 'plain', 'utf-8')
#设置邮件头信息
msg['From'] = Header("发送者")
msg['TO'] = Header("接收者") 
msg['Subject'] = Header('主题设置','utf-8')

# 发送完毕后，关闭与SMTP服务器的连接，释放资源
smtp.quit()
###################################################################################################################################################################
#email模块：主要进行构建邮件，针对上述msg、内容的设置
from email.mime.text import MIMEText #纯文本，HTML
from email.mime.image import MIMEImage #图片
from email.mime.multipart import MIMEMultipart #多种组合内容
from email.header import Header
#################################################################################################################################################################
#附件：
msg = MIMEMultipart()
msg.attach(MIMEText('文本内容', 'html', 'utf-8'))
#构造附件1，传送当前⽬录下的 test1.txt ⽂件
att1 = MIMEText(open('test1.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="test1.txt"'
msg.attach(att1)
###############################################################################################################################################################################
#封装
import smtplib
from email.mime.text import MIMEText
from email.header import Header

class SendingEmails:
    def __init__(self, from_addr, to_addr, smtp_server, smtp_port, password):
        """
        初始化发件人、收件人、SMTP服务器和端口以及密码。

        这些属性用于配置电子邮件的发送参数。

        参数:
        from_addr: 发件人邮箱地址。
        to_addr: 收件人邮箱地址。
        smtp_server: SMTP服务器地址。
        smtp_port: SMTP服务器端口。
        password: 发件人邮箱的授权密码。
        """
        self.from_addr = from_addr
        self.to_addr = to_addr
        self.smtp_server = smtp_server
        self.smtp_port = smtp_port
        self.password = password


    def send_html_email(self, subject, content):
        """
        发送HTML格式的电子邮件。

        使用SMTP_SSL建立安全连接,登录邮箱，然后发送邮件。如果发送成功，打印成功消息；如果发送失败，打印失败原因。

        参数:
        subject - 邮件主题。
        content - 邮件正文,以HTML格式提供。
        """
        # 创建MIMEText对象，设置内容类型为HTML，编码为UTF-8
        msg = MIMEText(content, 'html', 'utf-8')

        # 设置邮件的发件人、收件人和主题
        msg['From'] = Header(self.from_addr)
        msg['To'] = Header(self.to_addr)
        msg['Subject'] = Header(subject)

        try:
            # 初始化SMTP_SSL客户端，指定邮箱服务器和端口
            smtp_server = smtplib.SMTP_SSL(self.smtp_server, self.smtp_port)
            # 登录邮箱
            smtp_server.login(self.from_addr, self.password)
            # 发送邮件
            smtp_server.sendmail(self.from_addr, self.to_addr, msg.as_string())
            # 关闭SMTP连接
            smtp_server.quit()
            # 邮件发送成功，打印提示信息
            print('邮件发送成功')
        except smtplib.SMTPException as e:
            # 邮件发送失败，打印失败信息和异常详情
            print('邮件发送失败', e)


































